/*
 【入门】需要安排几位师傅加工零件？
  题目描述
    某工厂有 n 个零件加工的师傅，每位师傅每天能够加工出不同数量的零件。
    现有 m 个零件要求一天加工完，请问该工厂最少需要派几个师傅来完成这次零件加工任务，
    如果安排所有的师傅都参与加工也不能在一天内完成任务，请输出 “NO”。（4.2.71）
  输入
    第一行有两个整数，用空格隔开；
      第一个整数代表要加工的总零件个数 m（m <= 10^6），
      第二个整数代表工厂的零件加工师傅的数量 n（n <= 100）。
    第二行有 n 个整数，分别代表每个师傅每天能够加工出来的零件数量（每个师傅每天加工的零件数量 <= 10^4）。
  输出
    工厂在 1 天时间内加工所有零件需要的师傅数量或者输出 NO。
  样例输入
    10 5
    1 3 2 4 2
  样例输出
    4
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, w;
    int a[101];

    cin >> w >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    // 按"每天能够加工出零件的数量"从小到大的顺序, 对师傅进行排序
    sort(a + 1, a + n + 1);

    // 从每天加工零件多的师傅开始，从后往前找
    int num = 0;
    int x = 0;
    for (int i = n; i >= 0; i--) {
        x = x + a[i];
        num++;
        if (x >= w) {
            cout << num;
            return 0;
        }
    }
    cout << "NO";

    return 0;
}